// 引入产品模型命名空间
using RestfulApi.Models;

// 定义数据访问层命名空间
namespace RestfulApi.Data
{
    // 产品仓储类，负责产品数据的CRUD操作
    public class ProductRepository
    {
        // 静态产品列表，模拟数据库存储
        private static List<Product> _products = new List<Product>
        {
            // 初始化三个产品示例
            new Product { Id = 1, Name = "笔记本电脑", Description = "高性能笔记本电脑", Price = 5999.99m, Stock = 100 },
            new Product { Id = 2, Name = "智能手机", Description = "最新款智能手机", Price = 3999.99m, Stock = 200 },
            new Product { Id = 3, Name = "平板电脑", Description = "轻薄平板电脑", Price = 2999.99m, Stock = 150 }
        };

        // 获取所有产品的方法
        public IEnumerable<Product> GetAll()
        {
            // 返回所有产品列表
            return _products;
        }

        // 根据ID获取单个产品的方法
        // 参数 id: 要查询的产品ID
        public Product? GetById(int id)
        {
            // 使用LINQ查询匹配ID的产品，如果不存在则返回null
            return _products.FirstOrDefault(p => p.Id == id);
        }

        // 添加新产品的方法
        // 参数 product: 要添加的产品对象
        public Product Add(Product product)
        {
            // 获取当前最大ID值
            var maxId = _products.Max(p => p.Id);
            // 为新产品分配ID（最大ID+1）
            product.Id = maxId + 1;
            // 将新产品添加到列表中
            _products.Add(product);
            // 返回添加后的产品（包含新ID）
            return product;
        }

        // 更新现有产品的方法
        // 参数 product: 包含更新信息的产品对象
        public bool Update(Product product)
        {
            // 查找要更新的产品索引
            var index = _products.FindIndex(p => p.Id == product.Id);
            // 如果产品不存在，返回失败
            if (index == -1)
                return false;

            // 更新产品信息
            _products[index] = product;
            // 返回成功标志
            return true;
        }

        // 删除产品的方法
        // 参数 id: 要删除的产品ID
        public bool Delete(int id)
        {
            // 查找要删除的产品
            var product = GetById(id);
            // 如果产品不存在，返回失败
            if (product == null)
                return false;

            // 从列表中移除产品
            _products.Remove(product);
            // 返回成功标志
            return true;
        }
    }
}
